home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / share / pyshared / launchpadbugs / bugbase.py < prev    next >
Text File  |  2008-08-27  |  15KB  |  346 lines

  1. from utils import valid_lp_url, bugnumber_to_url
  2. from lphelper import LateBindingProperty
  3. from lpconstants import BASEURL
  4.  
  5. class LPBugInfo(object):
  6.     def __init__(self, nr, url, status, importance, summary, package=None, all_tasks=False):
  7.         assert nr, "'LPBugInfo' needs at least the bugnumber as an argument"
  8.         self.__bugnumber = int(nr)
  9.         self.__url = url
  10.         self.__status = status
  11.         self.__importance = importance
  12.         self.__summary = summary
  13.         self.__sourcepackage = package
  14.         self.__all_tasks = all_tasks
  15.        
  16.     @property
  17.     def bugnumber(self):
  18.         return int(self.__bugnumber)
  19.         
  20.     @property
  21.     def url(self):
  22.         return self.__url or bugnumber_to_url(self.bugnumber)
  23.         
  24.     @property
  25.     def status(self):
  26.         return self.__status or "unknown"
  27.         
  28.     @property
  29.     def importance(self):
  30.         return self.__importance or "unknown"
  31.         
  32.     @property
  33.     def summary(self):
  34.         return self.__summary or "unknown"
  35.         
  36.     @property
  37.     def sourcepackage(self):
  38.         return self.__sourcepackage or ""
  39.        
  40.     def __int__(self):
  41.         return self.bugnumber
  42.     def __repr__(self):
  43.         return "<BugInfo %s>" %self.bugnumber
  44.     def __str__(self):
  45.         return "[Bug %s %s: %s/%s]" %(self.bugnumber, self.sourcepackage, self.status, self.importance)
  46.     def __hash__(self):
  47.         if not self.__all_tasks:
  48.             return self.bugnumber
  49.         else:
  50.             return super(LPBugInfo, self).__hash__()
  51.     def __eq__(self, other):
  52.         return hash(self) == hash(other)
  53.         
  54.         
  55.  
  56. class Bug(object):
  57.     def __init__(self, bug=None, url=None, connection=None):
  58.         assert len([i for i in (bug, url) if i]) == 1, "Bug needs one argument, either <bug> or <url>"
  59.         assert connection, "Connection object needed"
  60.  
  61.         [self.__bugnumber, self.__url, self.__status, self.__importance,
  62.             self.__sourcepackage, self.__summary] = [None]*6
  63.  
  64.         self.__connection = connection
  65.         self.__saved_hash = None
  66.  
  67.         if bug:
  68.             if isinstance(bug, str):
  69.                 bug = int(bug)
  70.                 
  71.             if isinstance(bug, int):
  72.                 self.__bugnumber = bug
  73.                 self.__url = bugnumber_to_url(self.__bugnumber)
  74.             elif isinstance(bug, LPBugInfo):
  75.                 self.__bugnumber = int(bug)
  76.                 self.__url = bug.url
  77.                 self.__status = bug.status
  78.                 self.__importance = bug.importance
  79.                 self.__sourcepackage = bug.sourcepackage
  80.                 self.__summary = bug.summary
  81.                 self.__saved_hash = hash(bug)
  82.             else:
  83.                 assert None, "type of bugnumber must be INT or STRING or bugnumber must be an instance of BugInfo, %s" %bug
  84.         elif url:
  85.             #TODO: check for valid url
  86.             self.__url = valid_lp_url(url, BASEURL.BUG)
  87.             assert self.__url, "Invalid launchpad url %s" %url
  88.             self.__bugnumber = int(self.__url.split("/")[-1])
  89.             
  90.     def __int__(self):
  91.         return int(self.bugnumber)
  92.         
  93.     def __repr__(self):
  94.         return "<Bug %s>" %self.bugnumber
  95.         
  96.     def __str__(self):
  97.         return "[Bug %s %s: %s/%s]" %(self.bugnumber, self.sourcepackage or "", self.status, self.importance)
  98.         
  99.     def __hash__(self):
  100.         if not self.__saved_hash is None:
  101.             return self.__saved_hash
  102.         else:
  103.             return super(Bug, self).__hash__()
  104.             
  105.     def __eq__(self, other):
  106.         return hash(self) == hash(other)
  107.  
  108. ##############################################################################
  109. # Abstract properties
  110. ##############################################################################
  111.     ##################################
  112.     # Read only
  113.     # (url, bugnumber, reporter, date, activity log, duplicates)
  114.     ##################################
  115.             
  116.     def get_url(self):
  117.         return self.__url 
  118.     url = property(get_url, doc="returns url of a bug report")
  119.         
  120.         
  121.     def get_bugnumber(self):
  122.         return self.__bugnumber
  123.     bugnumber = property(get_bugnumber, doc="returns bugnumber of a bug report")
  124.         
  125.         
  126.     def get_reporter(self):
  127.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  128.     reporter = LateBindingProperty(get_reporter, doc="returns reporter of a bugreport")    
  129.         
  130.         
  131.     def get_date(self):
  132.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  133.     date_reported = date = LateBindingProperty(get_date, doc="returns date of a bugreport")    
  134.         
  135.         
  136.     def get_text(self):
  137.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  138.     text = LateBindingProperty(get_text, doc="returns raw text of a bugreport (.description & .comments.text)")
  139.     
  140.         
  141.         
  142.     def get_activity(self):
  143.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  144.     activity = LateBindingProperty(get_activity, doc="parses the activity log")
  145.         
  146.         
  147.     def get_duplicates(self):
  148.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  149.     duplicates = LateBindingProperty(get_duplicates, doc="returns a set of duplicates")
  150.         
  151.         
  152.     def get_description_raw(self):
  153.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  154.     description_raw = LateBindingProperty(get_description_raw, doc="returns description in raw format")
  155.         
  156.     ##############################################
  157.     # Edit via '+edit'
  158.     # (title/summary, description, tags, nickname)
  159.     ##############################################
  160.  
  161.     def get_title(self):
  162.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  163.         
  164.     def set_title(self, title):
  165.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  166.     summary = title = LateBindingProperty(get_title, set_title, doc="returns title of a bugreport")
  167.  
  168.  
  169.     def get_description(self):
  170.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  171.         
  172.     def set_description(self, description):
  173.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  174.     description = LateBindingProperty(get_description, set_description, doc="description of a bugreport")
  175.  
  176.  
  177.     def get_tags(self):
  178.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  179.     tags = LateBindingProperty(get_tags, doc="tags of a bugreport")
  180.  
  181.  
  182.     def get_nickname(self):
  183.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  184.         
  185.     def set_nickname(self, nickname):
  186.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  187.     nickname = LateBindingProperty(get_nickname, set_nickname, doc="nickname of a bugreport")
  188.     
  189.     #############################################################################
  190.     # Edit via '+editstatus'
  191.     # (read-only: infotable, info)
  192.     # (project/package==target, status, importance,  milestone, assignee, [comment, mail])
  193.     #############################################################################
  194.     
  195.     def get_infotable(self):
  196.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  197.     infotable = LateBindingProperty(get_infotable, doc="returns the infotable of a bugreport")
  198.     
  199.     
  200.     def get_info(self):
  201.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  202.     info = LateBindingProperty(get_info, doc="returns the infotable of a bugreport")
  203.     
  204.     
  205.     def get_target(self):
  206.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  207.         
  208.     def set_target(self, target):
  209.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'        
  210.     target = LateBindingProperty(get_target, set_target, doc="returns target of a bugreport")
  211.     
  212.     
  213.     def get_importance(self):
  214.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  215.         
  216.     def set_importance(self, importance):
  217.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'        
  218.     importance = LateBindingProperty(get_importance, set_importance, doc="returns importance of a bugreport")
  219.     
  220.     
  221.     def get_status(self):
  222.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  223.         
  224.     def set_status(self, status):
  225.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'        
  226.     status = LateBindingProperty(get_status, set_status, doc="returns status of a bugreport")    
  227.     
  228.     
  229.     def get_milestone(self):
  230.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  231.         
  232.     def set_milestone(self, milestone):
  233.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'        
  234.     milestone = LateBindingProperty(get_milestone, set_milestone, doc="returns milestone of a bugreport")    
  235.     
  236.     
  237.     def get_assignee(self):
  238.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  239.         
  240.     def set_assignee(self, lplogin):
  241.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'        
  242.     assignee = LateBindingProperty(get_assignee, set_assignee, doc="returns assignee of a bugreport")
  243.     
  244.     
  245.     def get_sourcepackage(self):
  246.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  247.         
  248.     def set_sourcepackage(self, target):
  249.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  250.     sourcepackage = LateBindingProperty(get_sourcepackage, set_sourcepackage, doc="sourcepackage of a bugreport")        
  251.     
  252.     
  253.     def get_affects(self):
  254.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  255.     affects = LateBindingProperty(get_affects, doc="affected product of a bugreport")   
  256.     
  257.     #########################################################################
  258.     # Edit via '+dublicate'
  259.     # (duplicate)
  260.     #########################################################################
  261.     
  262.     def get_duplicates(self):
  263.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  264.     duplicates = LateBindingProperty(get_duplicates, doc="returns duplicates of a bugreport")
  265.         
  266.     def get_duplicate(self):
  267.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  268.         
  269.     def set_duplicate(self, bugnumber):
  270.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'        
  271.     duplicate_of = LateBindingProperty(get_duplicate, set_duplicate, doc="mark this bug as duplicate of another")
  272.     
  273.     #########################################################################
  274.     # Edit via '+secrecy'
  275.     # (duplicate)
  276.     #########################################################################
  277.     
  278.     def get_security(self):
  279.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  280.         
  281.     def set_security(self, value):
  282.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'        
  283.     security = LateBindingProperty(get_security, set_security, doc="returns security of a bugreport")
  284.     
  285.     def get_private(self):
  286.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  287.         
  288.     def set_private(self, value):
  289.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'        
  290.     private = LateBindingProperty(get_private, set_private, doc="returns private of a bugreport")
  291.     
  292.         
  293.     #########################################################################
  294.     # subscriptions
  295.     #########################################################################
  296.     
  297.     def get_subscriptions(self):
  298.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  299.         
  300.     def set_subscriptions(self, lplogin):
  301.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'        
  302.     subscribtions = subscriptions = subscribers = LateBindingProperty(get_subscriptions, set_subscriptions,
  303.             doc="returns subscriptions to a bugreport")
  304.     
  305.     def get_subscriptions_category(self, type):
  306.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  307.         
  308.     def get_comments(self):
  309.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  310.     comments = LateBindingProperty(get_comments, doc="returns a list of comments of a bugreport")
  311.         
  312.         
  313.     def get_attachments(self):
  314.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  315.     attachments = LateBindingProperty(get_attachments, doc="returns a list of attachments of a bugreport")
  316.     
  317.     
  318.     #########################################################################
  319.     # mentoring information
  320.     #########################################################################
  321.     
  322.     def get_mentors(self):
  323.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  324.     mentors = LateBindingProperty(get_mentors, doc="returns mentoring information")
  325.     
  326.     
  327.     #########################################################################
  328.     # date_* from /+text (needs implementation in html-mode)
  329.     #########################################################################
  330.     
  331.     def get_date_updated(self):
  332.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  333.     date_updated = LateBindingProperty(get_date_updated, doc="returns date when bugreport was updated")
  334.     
  335.     
  336.     #########################################################################
  337.     # attached branches
  338.     #########################################################################
  339.     
  340.     
  341.     def get_branches(self):
  342.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  343.     branches = LateBindingProperty(get_branches, doc="returns list of attached bzr branches")
  344.         
  345.  
  346.